{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "import os\n",
    "\n",
    "#Get present working directory\n",
    "if sys.platform == 'win32' or sys.platform == 'cygwin':\n",
    "    pwd = !CD\n",
    "else:\n",
    "    pwd = !pwd\n",
    "\n",
    "#Get directory up one level\n",
    "pwd = pwd[0]\n",
    "updir = pwd[:pwd.rfind(os.sep)]\n",
    "#Add same directory as main.py to path\n",
    "sys.path.insert(0, updir)\n",
    "\n",
    "#Pretend that we're in main.py now\n",
    "from algorithms import AbstractSynthesizer, EfrosLeungSynthesizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[160 184  72]\n",
      "124 185\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x193578fc8d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.image as mpimage\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "#Validate that Pillow is reading the JPEG data correctly\n",
    "#This may need to be run twice for the cell to behave correctly\n",
    "imageData = mpimage.imread(\"../sample-inputs/CMPSC458/apples.jpg\")\n",
    "#imageData = mpimage.imread(\"../sample-inputs/tri.png\")\n",
    "plt.imshow(imageData)\n",
    "print(imageData[0][0])\n",
    "print(len(imageData), len(imageData[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Test Cells\n",
    "The following cells are used to test synthesis methods - transparent is 0, range is 0-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "outputSize = (256, 256)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "from algorithms.AbstractSynthesizer import AbstractSynthesizer\n",
    "from algorithms.Pixel import Pixel\n",
    "import numpy as np\n",
    "import typing\n",
    "from typing import List, Union, Tuple\n",
    "import random\n",
    "from joblib import Parallel, delayed\n",
    "\n",
    "class EfrosLeungSynthesizer(AbstractSynthesizer):\n",
    "    \"\"\"\n",
    "    This class realizes a synthesizer based on that of the 1999 paper by Efros & Leung\n",
    "    See definitions in Abstract Synthesizer for how to use\n",
    "    \"\"\"\n",
    "    \n",
    "    def __init__(self, textonNeighborhoodDiameter: int):\n",
    "        if not bool(textonNeighborhoodDiameter%2):\n",
    "            raise ValueError(\"textonNeighborhoodDiameter must be an odd integer\")\n",
    "        self.textonNeighborhoodDiameter = textonNeighborhoodDiameter\n",
    "        self.errorTolerance = 0.2\n",
    "    \n",
    "    def getDescription(self) -> str:\n",
    "        return \"Pixel based texture synthesis using methods derived from Efros & Leung's 1999 paper.  Uses fully transparent pixels to identify areas for texture synthesis\"\n",
    "    \n",
    "    @staticmethod\n",
    "    def __generateBaseImage(inputData: Union[List, np.ndarray], outputSize: Tuple[int, int]) -> List[List[Pixel]]:\n",
    "        \"\"\"\n",
    "        Generate the image on which to draw; this implementation does not use constrained synthesis.  Use the EfrosLeungConstrainedSynthesizer instead for that.\n",
    "        Args:\n",
    "            inputData: An array-like-object of two dimensions with a single value for greyscale or a tuple for RGB/RGBA data\n",
    "            outputSize: A tuple dictating the size of the output image in (X, Y)\n",
    "            \n",
    "        Returns:\n",
    "            A 2D list of pixel objects\n",
    "        \"\"\"\n",
    "        #Sanity check before generating and seeding\n",
    "        if outputSize[0] < 3 or outputSize[1] < 3:\n",
    "            raise ValueError(\"Output image must be 3x3 or larger\")\n",
    "           \n",
    "        numchannels = len(inputData[0][0])\\\n",
    "        \n",
    "        #Generate a blank image of the desired size\n",
    "        pixels = []\n",
    "        for i in range(outputSize[1]):\n",
    "            pixels.append([])\n",
    "            for j in range(outputSize[0]):\n",
    "                pixels[i].append(Pixel())\n",
    "        \n",
    "        #Populate the seed\n",
    "        x_samp = random.randint(0,len(inputData[0])-2)\n",
    "        y_samp = random.randint(0, len(inputData)-2)\n",
    "        x_out = int(outputSize[1]/2)-1\n",
    "        y_out = int(outputSize[0]/2)-1\n",
    "        for i in range(3):\n",
    "            for j in range(3):\n",
    "                pixelData = inputData[y_samp+i][x_samp+j]\n",
    "                if numchannels == 4:\n",
    "                    pixel = Pixel(pixelData[3], pixelData[0], pixelData[1], pixelData[2], True)\n",
    "                elif numchannels == 1:\n",
    "                    pixel = Pixel(pixelData[3], filled=True)\n",
    "                else:\n",
    "                    pixel = Pixel(1.0, pixelData[0], pixelData[1], pixelData[2], True)\n",
    "                pixels[y_out+i][x_out+j] = pixel\n",
    "                \n",
    "        return pixels\n",
    "    \n",
    "    @staticmethod    \n",
    "    def __pixelArrayToImage(pixels: List[List[Pixel]], numchannels: int) -> List[List[Pixel]]:\n",
    "        \"\"\"\n",
    "        Converts the pixel array to a matplotlib compatible list\n",
    "        \n",
    "        Args:\n",
    "            pixels: A 2D list of pixels to convert to an image\n",
    "            numchannels: An integer describing the number of channels\n",
    "        \n",
    "        Returns:\n",
    "            A matplotlib compatible 2D list\n",
    "        \"\"\"\n",
    "        imageData = []\n",
    "        for row in pixels:\n",
    "            rowData = []\n",
    "            for pixel in row:\n",
    "                if numchannels == 4:\n",
    "                    rowData.append(pixel.getRGBA())\n",
    "                elif numchannels == 1:\n",
    "                    rowData.append(pixel.getGreyscale())\n",
    "                else:\n",
    "                    rowData.append(pixel.getRGB())\n",
    "            imageData.append(rowData)\n",
    "            \n",
    "        if numchannels > 1:\n",
    "            imageData = [[[np.uint8(value) for value in pixel] for pixel in row] for row in imageData]\n",
    "        else:\n",
    "            imageData = [[np.uint8(pixel) for pixel in row] for row in imageData]\n",
    "        \n",
    "        return imageData\n",
    "    \n",
    "    def __gauss2D(self) -> np.ndarray:\n",
    "        \"\"\"\n",
    "        2D gaussian mask with the size of textonNeighborhoodDiameter X textonNeighborhoodDiameter\n",
    "        \n",
    "        Returns:\n",
    "            np.ndarray: textonNeighborhoodDiameterxte X tonNeighborhoodDiameter gaussian filter\n",
    "        \"\"\"\n",
    "        #TODO: make sigma=textonNeighborHoodDiameter/6.4\n",
    "        size = self.textonNeighborhoodDiameter\n",
    "        x,y = np.mgrid[-size:size+1,-size:size+1]\n",
    "        g = np.exp(-(x**2/size+y**2/size))\n",
    "        out = g/g.sum()\n",
    "        return out\n",
    "    \n",
    "    def __getUnfilledNeighbors(self, pixels: List[List[Pixel]]) -> List[Tuple[int, int]]:\n",
    "        \"\"\"\n",
    "        Get a list of unfilled pixel coordinates from the current image determined by Pixel.isFilled()\n",
    "        \n",
    "        Args:\n",
    "            pixels: The image being generated\n",
    "        \n",
    "        Returns:\n",
    "            unfilledPixels: A list of tuples in (i,j) format\n",
    "        \"\"\"\n",
    "        unfilledPixels = set()\n",
    "        imax = len(pixels)\n",
    "        jmax = len(pixels[0])\n",
    "        for i in range(imax):\n",
    "            for j in range(jmax):\n",
    "                if(pixels[i][j].isFilled()):\n",
    "                    #conservative approach; just use adjacent, no diagonals\n",
    "                    if i-1 >= 0 and not pixels[i-1][j].isFilled():\n",
    "                        unfilledPixels.add((i-1,j))\n",
    "                    if i+1 < imax and not pixels[i+1][j].isFilled():\n",
    "                        unfilledPixels.add((i+1,j))\n",
    "                    if j-1 >= 0 and not pixels[i][j-1].isFilled():\n",
    "                        unfilledPixels.add((i,j-1))\n",
    "                    if j+1 < jmax and not pixels[i][j+1].isFilled():\n",
    "                        unfilledPixels.add((i,j+1))\n",
    "                #if not filled, don't worry\n",
    "        return unfilledPixels\n",
    "    \n",
    "    def __getNeightborhoodWindow(self, pixel: Tuple[int, int], pixels: List[List[Pixel]]) -> List[List[Pixel]]:\n",
    "        \"\"\"\n",
    "        Get the texton surrounding a given pixel\n",
    "        \n",
    "        Args:\n",
    "            pixel: A pixel coordinate in (i,j) format\n",
    "            pixels: The image being generated\n",
    "            \n",
    "        Returns:\n",
    "            List[List[Pixel]]: The pixels in this texton in 2D format with None as no pixel\n",
    "        \"\"\"\n",
    "        size = self.textonNeighborhoodDiameter\n",
    "        imax = len(pixels)\n",
    "        jmax = len(pixels[0])\n",
    "        output = []\n",
    "        for i in range(int(pixel[0]-size/2)+1, int(pixel[0]+size/2)+1):\n",
    "            if i < 0 or i >= imax:\n",
    "                output.append([None]*jmax)\n",
    "                continue\n",
    "            row = []\n",
    "            for j in range(int(pixel[1]-size/2)+1, int(pixel[1]+size/2)+1):\n",
    "                if j < 0 or j >= jmax or not pixels[i][j].isFilled():\n",
    "                    row.append(None)\n",
    "                    continue\n",
    "                row.append(pixels[i][j])\n",
    "            output.append(row)\n",
    "        return output\n",
    "    \n",
    "    def __generateSSDs(self, i: int, reference: Union[List, np.ndarray], template: List[List[Pixel]], ssd: List[List[float]], numChannels: int, gaussMask, validMask, totalWeight):\n",
    "        \"\"\"\n",
    "        Generate SSDs for one i value in an i, j pair; this is provided for parallelism reasons\n",
    "        \n",
    "        Args:\n",
    "            i: The i coordinate for this SSD metric\n",
    "            reference: The reference image\n",
    "            template: The texton template\n",
    "            ssd: The sum of square differences matrix\n",
    "            numChannels: The number of channels in the image\n",
    "        \"\"\"\n",
    "        for j in range(len(reference[0])):\n",
    "            for ii in range(len(template)):\n",
    "                for jj in range(len(template[0])):\n",
    "                    if template[ii][jj] is None:\n",
    "                        continue\n",
    "                    if i-ii < 0 or j-jj < 0:\n",
    "                        continue\n",
    "                    if numChannels == 1:\n",
    "                        distance = (template[ii][jj].getGreyscale()-reference[i-ii][j-jj])**2\n",
    "                    elif numChannels == 3:\n",
    "                        RGB = template[ii][jj].getRGB()\n",
    "                        distance = (RGB[0]-reference[i-ii][j-jj][0])**2\n",
    "                        distance += (RGB[1]-reference[i-ii][j-jj][1])**2\n",
    "                        distance += (RGB[2]-reference[i-ii][j-jj][2])**2\n",
    "                    elif numChannels == 4:\n",
    "                        RGBA = template[ii][jj].getRGBA()\n",
    "                        distance = (RGB[0]-reference[i-ii][j-jj][0])**2\n",
    "                        distance += (RGB[1]-reference[i-ii][j-jj][1])**2\n",
    "                        distance += (RGB[2]-reference[i-ii][j-jj][2])**2\n",
    "                        distance += (RGB[3]-reference[i-ii][j-jj][3])**2\n",
    "                    else:\n",
    "                        raise ValueError(\"Unexpected number of channels\")\n",
    "                    ssd[i][j] += distance * validMask[ii][jj] * gaussMask[ii][jj]\n",
    "            ssd[i][j] /= totalWeight\n",
    "    \n",
    "    def __findMatches(self, template: List[List[Pixel]], reference: Union[List, np.ndarray], numChannels: int) -> List[Pixel]:\n",
    "        \"\"\"\n",
    "        Find matches identifies pixels that are a good fit for the target template based on the reference input\n",
    "        \n",
    "        Args:\n",
    "            template: The texton trying to be synthesized\n",
    "            reference: The reference image from which we are synthesizing\n",
    "            numChannels: The  number of channels to consider\n",
    "            \n",
    "        Returns:\n",
    "            List[Pixel]: The list of possible pixels\n",
    "        \"\"\"\n",
    "        gaussMask = self.__gauss2D()\n",
    "        validMask = [[int(entry is not None) for entry in row] for row in template]\n",
    "        #Total weight calculation\n",
    "        totalWeight = 0\n",
    "        for i in range(len(template)):\n",
    "            for j in range(len(template[0])):\n",
    "                totalWeight += gaussMask[i][j]*validMask[i][j]\n",
    "        #SSD starts as 0\n",
    "        ssd = [[0]*len(reference[0])]*len(reference)\n",
    "        for i in range(len(reference)):\n",
    "            self.__generateSSDs(i, reference, template, ssd, numChannels, gaussMask, validMask, totalWeight) \n",
    "\n",
    "        #SSDs are now calculated; pixels may be chosen\n",
    "        maxerr =  min([min(row) for row in ssd])*(1+self.errorTolerance)\n",
    "        if numChannels == 1:\n",
    "            pixelList = [Pixel(reference[i][j]) for i in range(len(reference)) for j in range(len(reference[0])) if ssd[i][j] <= maxerr]\n",
    "        elif numChannels == 3:\n",
    "            pixelList = [Pixel(1, reference[i][j][0], reference[i][j][1], reference[i][j][2]) for i in range(len(reference)) for j in range(len(reference[0])) if ssd[i][j] <= maxerr]\n",
    "        else:\n",
    "            pixelList = [Pixel(reference[i][j][0], reference[i][j][1], reference[i][j][2], reference[i][j][3]) for i in range(len(reference)) for j in range(len(reference[0])) if ssd[i][j] <= maxerr]\n",
    "            \n",
    "        return pixelList\n",
    "    \n",
    "    def generateTexture(self, inputData: Union[List, np.ndarray], outputSize: Tuple[int, int]) -> Union[List, np.ndarray]:\n",
    "        numchannels = len(inputData[0][0])\n",
    "        pixels = EfrosLeungSynthesizer.__generateBaseImage(inputData, outputSize)\n",
    "        filled = False;\n",
    "        while not filled:\n",
    "            progress = 0\n",
    "            pixelList = self.__getUnfilledNeighbors(pixels)\n",
    "            for pixel in pixelList:\n",
    "                template = self.__getNeightborhoodWindow(pixel, pixels)\n",
    "                bestMatches = self.__findMatches(template, inputData, numchannels)\n",
    "                if len(bestMatches) == 0:\n",
    "                    self.errorTolerance *= 1.1\n",
    "                    print('intoleran')\n",
    "                    continue\n",
    "                match = random.choice(bestMatches)\n",
    "                pixels[pixel[0]][pixel[1]].cp(match)\n",
    "                print(match)\n",
    "            filled = True\n",
    "            for row in pixels:\n",
    "                for pixel in row:\n",
    "                    filled &= pixel.isFilled()\n",
    "        \n",
    "        return EfrosLeungSynthesizer.__pixelArrayToImage(pixels, numchannels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:200: RuntimeWarning: overflow encountered in double_scalars\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<algorithms.Pixel.Pixel object at 0x00000193586F38D0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D4A20>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9B38>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D91D0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0D30>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D4400>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0400>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D43C8>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0390>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D4F60>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9BE0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9B38>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587ED9E8>\n",
      "<algorithms.Pixel.Pixel object at 0x000001935877DFD0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0E80>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D48D0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0F98>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D4780>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0C88>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581BB358>\n",
      "<algorithms.Pixel.Pixel object at 0x0000019357FAA780>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D4D30>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0F28>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D99B0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D02B0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9400>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587F2B38>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D41D0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9EF0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581CEB38>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9EF0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9A20>\n",
      "<algorithms.Pixel.Pixel object at 0x000001935867E128>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9550>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581C4C88>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587E6EF0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0D68>\n",
      "<algorithms.Pixel.Pixel object at 0x0000019357F6E0F0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D07F0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D96D8>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9FD0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581BE6D8>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581BB400>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9518>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0128>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9390>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D05F8>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D94A8>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D0F60>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9940>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D01D0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D96D8>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9D68>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581C2E48>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9EF0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193586EB9B0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9D30>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9E80>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D02B0>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193587D9550>\n",
      "<algorithms.Pixel.Pixel object at 0x00000193581B9B00>\n",
      "<algorithms.Pixel.Pixel object at 0x0000019358BA27B8>\n"
     ]
    }
   ],
   "source": [
    "%%prun\n",
    "synth = EfrosLeungSynthesizer(3)\n",
    "newImage = synth.generateTexture(imageData, (128,128))\n",
    "plt.imshow(newImage)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
